/**
 * Copyright (C) 2010 Daniel <daniel.petisme@gmail.com>
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *         http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

/**
 * 
 */
package fr.daniel.todolist.view.sorter;

import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.viewers.ViewerSorter;

import fr.daniel.todolist.model.pojo.Todo;

/**
 * @author Daniel
 * 
 */
public class TodoSorter extends ViewerSorter {
	private int propertyIndex;
	private static final int ASCENDING = 0;
	private static final int DESCENDING = 1;

	private int direction = ASCENDING;

	public TodoSorter() {
		this.propertyIndex = 0;
		direction = ASCENDING;
	}

	public void setColumn(int column) {
		if (column == this.propertyIndex) {
			// Same column as last sort; toggle the direction
			direction = 1 - direction;
		} else {
			// New column; do an ascending sort
			this.propertyIndex = column;
			direction = DESCENDING;
		}
	}

	@Override
	public int compare(Viewer viewer, Object e1, Object e2) {
		Todo t1 = (Todo) e1;
		Todo t2 = (Todo) e2;
		int rc = 0;
		switch (propertyIndex) {
		case 0:
			rc = new Integer(t1.getPriority().getId())
			.compareTo(new Integer(t2.getPriority().getId()));
			break;
		case 1:
			rc = new Integer(t1.getPriority().getLevel())
					.compareTo(new Integer(t2.getPriority().getLevel()));
			break;
		default:
			rc = 0;
		}
		// If descending order, flip the direction
		if (direction == DESCENDING) {
			rc = -rc;
		}
		return rc;
	}

}
